昨天我們講了什麼是CoreNATS是什麼,它在NATS中扮演什麼樣的角色,也探討Subject based Message的優點跟subject的機制。
今天的文章中,我們接著講Subject based Message。
好了~讓我們開始吧!
昨天文章中有提到,CoreNATS的subject表示一個字串,這個字串作為訊息的type。
當publisher將訊息發送到NATS裡的某個subject,有subscribe這subject的scriber會收到這筆訊息。
我們歸類subject的特性:
subject
注意喔,不是每個Event Broker和Message Queue都叫subject
,可能會叫topics
、channels
, 或是stream
,很常會被認為是不同東西。
在CoreNATS中,wildcard用來subscribe subject的一種機制,允許subscriber同時匹配多個subject。
對於需要接收多種有關訊息的情況特別適合。
在一個電商平台的訂單系統中,可能會涉及多個相關的主題,像是訂單的創建、更新和取消等。以下是如何使用通配符來簡化消息的接收。
wildcard的type有分兩種:
我們舉訂單系統為例子:
訂單系統可能會有多個有關的subject,像是建立、更新以及取消訂單,subject的架構就會像這樣:
orders.created
orders.updated
orders.cancelled
如果想要接收所有與訂單狀態有關的訊息,就可以用單層wildcard。
例如,orders.*
可以讓你接收到所有跟訂單狀態有關的訊息,不會接收到其他類型的訊息。
若有orders.cancelled
的訊息被發布上來,卻沒有subscriber subscribe的話,這筆訊息就會被捨棄掉。
如果想要擴展到了不同的程式,subject會變成如下:
orders.taipei.created
orders.taipei.updated
orders.taipei.
orders.taichung.created
orders.taichung.updated
orders.taichung.cancelled
...
如果你想接收所有城市的所有訂單相關訊息,包含建立、更新和取消,可以使用多層wildcard orders.>
,可以讓subscriber接收到所有城市的任何訊息。
若subscriber只想要接收台北所有訂單的訊息,可用orders.taipei.*
。
雖然上面講了很多CoreNATS帶給開發人員很高的靈活性與可靠性,但也有一些缺點:
在考慮使用CoreNATS的時候,了解優缺點是非常重要的。團隊在設計系統架構時需要考量CoreNATS所帶來的限制和學習曲線,對於不熟EDA或NATS的人來講,一下子要上手會比較困難,這點也需要考慮進去。
好了~~今天就到這邊!!